import 'dart:typed_data';
import 'package:get/get.dart';
import 'package:hj_crm/widget/crop_image_widget.dart';
import 'package:image_picker/image_picker.dart';

enum ImageSourceKind {
  image, // 选择图片
  camera, // 拍照
}

class ImageUtils {
  static Future<void> selectImage({
    ImageSourceKind kind = ImageSourceKind.image,
    Function(Uint8List)? result,
  }) async {
    ImageSource source;
    if (kind == ImageSourceKind.image) {
      source = ImageSource.gallery;
    } else {
      source = ImageSource.camera;
    }

    var pickedFile = await ImagePicker().pickImage(source: source);
    if (null != pickedFile) {
      Get.to(() => CropImageWidget(
            file: pickedFile,
            title: '裁剪图片',
            onFileDelete: () {
              Get.back();
            },
            onFileUpload: (cropped) async {
              Uint8List bytes = await cropped.readAsBytes();
              result?.call(bytes);
              Get.back();
            },
          ));
    }
  }

  /*
  处理 MainActivity 销毁
  当内存压力过大时，Android 系统可能会使用 image_picker 终止应用程序的 MainActivity。
  在 Android 上，image_picker 使用默认的Intent.ACTION_GET_CONTENT意图MediaStore.ACTION_IMAGE_CAPTURE 。
  这意味着在执行意图时，源应用程序将移至后台，并在系统内存不足时进行清理。当意图执行完毕后，Android 将重新启动应用程序。
  由于数据永远不会返回到原始调用，因此请使用该 ImagePicker.retrieveLostData()方法检索丢失的数据。
  */
  Future<void> getLostData() async {
    final ImagePicker picker = ImagePicker();
    final LostDataResponse response = await picker.retrieveLostData();
    if (response.isEmpty) {
      return;
    }
    final List<XFile>? files = response.files;
    if (files != null) {
      // _handleLostFiles(files);
    } else {
      // _handleError(response.exception);
    }
  }
}
